diff --git a/package-lock.json b/package-lock.json
index 84476f4..5c837bb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -288,6 +288,12 @@
                 "@babel/types": "^7.18.6"
             }
         },
+        "@babel/helper-string-parser": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
+            "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
+            "dev": true
+        },
         "@babel/helper-validator-identifier": {
             "version": "7.18.6",
             "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
@@ -539,18 +545,18 @@
             }
         },
         "@babel/plugin-syntax-export-default-from": {
-            "version": "7.23.3",
-            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.23.3.tgz",
-            "integrity": "sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==",
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.24.1.tgz",
+            "integrity": "sha512-cNXSxv9eTkGUtd0PsNMK8Yx5xeScxfpWOUAxE+ZPAXXEcAMOC3fk7LRdXq5fvpra2pLx2p1YtkAhpUbB2SwaRA==",
             "dev": true,
             "requires": {
-                "@babel/helper-plugin-utils": "^7.22.5"
+                "@babel/helper-plugin-utils": "^7.24.0"
             },
             "dependencies": {
                 "@babel/helper-plugin-utils": {
-                    "version": "7.22.5",
-                    "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
-                    "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
+                    "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
                     "dev": true
                 }
             }
@@ -643,6 +649,23 @@
                 "@babel/helper-plugin-utils": "^7.14.5"
             }
         },
+        "@babel/plugin-syntax-typescript": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz",
+            "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==",
+            "dev": true,
+            "requires": {
+                "@babel/helper-plugin-utils": "^7.24.0"
+            },
+            "dependencies": {
+                "@babel/helper-plugin-utils": {
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
+                    "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+                    "dev": true
+                }
+            }
+        },
         "@babel/plugin-transform-arrow-functions": {
             "version": "7.18.6",
             "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz",
@@ -947,6 +970,177 @@
                 "@babel/helper-plugin-utils": "^7.18.9"
             }
         },
+        "@babel/plugin-transform-typescript": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.1.tgz",
+            "integrity": "sha512-liYSESjX2fZ7JyBFkYG78nfvHlMKE6IpNdTVnxmlYUR+j5ZLsitFbaAE+eJSK2zPPkNWNw4mXL51rQ8WrvdK0w==",
+            "dev": true,
+            "requires": {
+                "@babel/helper-annotate-as-pure": "^7.22.5",
+                "@babel/helper-create-class-features-plugin": "^7.24.1",
+                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/plugin-syntax-typescript": "^7.24.1"
+            },
+            "dependencies": {
+                "@babel/code-frame": {
+                    "version": "7.24.2",
+                    "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz",
+                    "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/highlight": "^7.24.2",
+                        "picocolors": "^1.0.0"
+                    }
+                },
+                "@babel/helper-annotate-as-pure": {
+                    "version": "7.22.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
+                    "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.22.5"
+                    }
+                },
+                "@babel/helper-create-class-features-plugin": {
+                    "version": "7.24.1",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.1.tgz",
+                    "integrity": "sha512-1yJa9dX9g//V6fDebXoEfEsxkZHk3Hcbm+zLhyu6qVgYFLvmTALTeV+jNU9e5RnYtioBrGEOdoI2joMSNQ/+aA==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-annotate-as-pure": "^7.22.5",
+                        "@babel/helper-environment-visitor": "^7.22.20",
+                        "@babel/helper-function-name": "^7.23.0",
+                        "@babel/helper-member-expression-to-functions": "^7.23.0",
+                        "@babel/helper-optimise-call-expression": "^7.22.5",
+                        "@babel/helper-replace-supers": "^7.24.1",
+                        "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+                        "@babel/helper-split-export-declaration": "^7.22.6",
+                        "semver": "^6.3.1"
+                    }
+                },
+                "@babel/helper-environment-visitor": {
+                    "version": "7.22.20",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+                    "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+                    "dev": true
+                },
+                "@babel/helper-function-name": {
+                    "version": "7.23.0",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+                    "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/template": "^7.22.15",
+                        "@babel/types": "^7.23.0"
+                    }
+                },
+                "@babel/helper-member-expression-to-functions": {
+                    "version": "7.23.0",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
+                    "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.23.0"
+                    }
+                },
+                "@babel/helper-optimise-call-expression": {
+                    "version": "7.22.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
+                    "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.22.5"
+                    }
+                },
+                "@babel/helper-plugin-utils": {
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
+                    "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+                    "dev": true
+                },
+                "@babel/helper-replace-supers": {
+                    "version": "7.24.1",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz",
+                    "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-environment-visitor": "^7.22.20",
+                        "@babel/helper-member-expression-to-functions": "^7.23.0",
+                        "@babel/helper-optimise-call-expression": "^7.22.5"
+                    }
+                },
+                "@babel/helper-skip-transparent-expression-wrappers": {
+                    "version": "7.22.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
+                    "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.22.5"
+                    }
+                },
+                "@babel/helper-split-export-declaration": {
+                    "version": "7.22.6",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+                    "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.22.5"
+                    }
+                },
+                "@babel/helper-validator-identifier": {
+                    "version": "7.22.20",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+                    "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+                    "dev": true
+                },
+                "@babel/highlight": {
+                    "version": "7.24.2",
+                    "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
+                    "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-validator-identifier": "^7.22.20",
+                        "chalk": "^2.4.2",
+                        "js-tokens": "^4.0.0",
+                        "picocolors": "^1.0.0"
+                    }
+                },
+                "@babel/parser": {
+                    "version": "7.24.1",
+                    "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz",
+                    "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==",
+                    "dev": true
+                },
+                "@babel/template": {
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz",
+                    "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/code-frame": "^7.23.5",
+                        "@babel/parser": "^7.24.0",
+                        "@babel/types": "^7.24.0"
+                    }
+                },
+                "@babel/types": {
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
+                    "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-string-parser": "^7.23.4",
+                        "@babel/helper-validator-identifier": "^7.22.20",
+                        "to-fast-properties": "^2.0.0"
+                    }
+                },
+                "semver": {
+                    "version": "6.3.1",
+                    "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+                    "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+                    "dev": true
+                }
+            }
+        },
         "@babel/plugin-transform-unicode-escapes": {
             "version": "7.18.6",
             "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz",
@@ -1077,6 +1271,116 @@
                 "@babel/plugin-transform-react-pure-annotations": "^7.16.7"
             }
         },
+        "@babel/preset-typescript": {
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.24.1.tgz",
+            "integrity": "sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==",
+            "dev": true,
+            "requires": {
+                "@babel/helper-plugin-utils": "^7.24.0",
+                "@babel/helper-validator-option": "^7.23.5",
+                "@babel/plugin-syntax-jsx": "^7.24.1",
+                "@babel/plugin-transform-modules-commonjs": "^7.24.1",
+                "@babel/plugin-transform-typescript": "^7.24.1"
+            },
+            "dependencies": {
+                "@babel/helper-environment-visitor": {
+                    "version": "7.22.20",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+                    "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
+                    "dev": true
+                },
+                "@babel/helper-module-imports": {
+                    "version": "7.24.3",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz",
+                    "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.24.0"
+                    }
+                },
+                "@babel/helper-module-transforms": {
+                    "version": "7.23.3",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+                    "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-environment-visitor": "^7.22.20",
+                        "@babel/helper-module-imports": "^7.22.15",
+                        "@babel/helper-simple-access": "^7.22.5",
+                        "@babel/helper-split-export-declaration": "^7.22.6",
+                        "@babel/helper-validator-identifier": "^7.22.20"
+                    }
+                },
+                "@babel/helper-plugin-utils": {
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz",
+                    "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==",
+                    "dev": true
+                },
+                "@babel/helper-simple-access": {
+                    "version": "7.22.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
+                    "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.22.5"
+                    }
+                },
+                "@babel/helper-split-export-declaration": {
+                    "version": "7.22.6",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+                    "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/types": "^7.22.5"
+                    }
+                },
+                "@babel/helper-validator-identifier": {
+                    "version": "7.22.20",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+                    "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+                    "dev": true
+                },
+                "@babel/helper-validator-option": {
+                    "version": "7.23.5",
+                    "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+                    "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
+                    "dev": true
+                },
+                "@babel/plugin-syntax-jsx": {
+                    "version": "7.24.1",
+                    "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz",
+                    "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-plugin-utils": "^7.24.0"
+                    }
+                },
+                "@babel/plugin-transform-modules-commonjs": {
+                    "version": "7.24.1",
+                    "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.1.tgz",
+                    "integrity": "sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-module-transforms": "^7.23.3",
+                        "@babel/helper-plugin-utils": "^7.24.0",
+                        "@babel/helper-simple-access": "^7.22.5"
+                    }
+                },
+                "@babel/types": {
+                    "version": "7.24.0",
+                    "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz",
+                    "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==",
+                    "dev": true,
+                    "requires": {
+                        "@babel/helper-string-parser": "^7.23.4",
+                        "@babel/helper-validator-identifier": "^7.22.20",
+                        "to-fast-properties": "^2.0.0"
+                    }
+                }
+            }
+        },
         "@babel/register": {
             "version": "7.18.9",
             "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz",
@@ -1098,9 +1402,9 @@
             }
         },
         "@babel/runtime-corejs2": {
-            "version": "7.23.4",
-            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.23.4.tgz",
-            "integrity": "sha512-w10wlnER4ZJ60UlxQWiDhaD1nxHrJ3YgGK2V5iws7a07Q1+vQw4eL54kdtuPIadE3LkeG/Xtg+TEI5zWgjYEjw==",
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.24.1.tgz",
+            "integrity": "sha512-De0q0utpUPiXnc7+B7Ku86mJ0eDItC/v3uFa/lQkq63XnHyZiytDHeCIvechlnVwwpU2ChjGF7c3I+mBrTudwg==",
             "dev": true,
             "requires": {
                 "core-js": "^2.6.12",
@@ -1108,9 +1412,9 @@
             },
             "dependencies": {
                 "regenerator-runtime": {
-                    "version": "0.14.0",
-                    "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
-                    "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==",
+                    "version": "0.14.1",
+                    "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
+                    "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
                     "dev": true
                 }
             }
@@ -1264,9 +1568,9 @@
             }
         },
         "@exabyte-io/application-flavors.js": {
-            "version": "2024.2.27-1",
-            "resolved": "https://registry.npmjs.org/@exabyte-io/application-flavors.js/-/application-flavors.js-2024.2.27-1.tgz",
-            "integrity": "sha512-aZ6TCg4x1ImVrC8cqM1TSIEedbwsiMgNhwsDW8KsTwm6O5nzwLb7mCBxsTVWljmdilq769K8XEfcTSEbyWnFVQ==",
+            "version": "2024.3.21-0",
+            "resolved": "https://registry.npmjs.org/@exabyte-io/application-flavors.js/-/application-flavors.js-2024.3.21-0.tgz",
+            "integrity": "sha512-U0C830YpX83UXVlgjt/iQdxBb8ffDj8Tr73tB0EkxGzz0dalwBOktkYbmL+AAiXG2MmKEHJ5VDsQf4RitJ5nLg==",
             "dev": true,
             "requires": {
                 "@babel/cli": "7.16.0",
@@ -1342,36 +1646,15 @@
             }
         },
         "@exabyte-io/code.js": {
-            "version": "2023.11.22-0",
-            "resolved": "https://registry.npmjs.org/@exabyte-io/code.js/-/code.js-2023.11.22-0.tgz",
-            "integrity": "sha512-FKS3gUHimr3QA6V1hOoux1s6fafvjgbfCN9s45Ol6Qa3zdZLkUECJ20r4uGpHvg1ClFpB3BUL+cJU1kwlHjzJg==",
+            "version": "2024.2.29-0",
+            "resolved": "https://registry.npmjs.org/@exabyte-io/code.js/-/code.js-2024.2.29-0.tgz",
+            "integrity": "sha512-pOqR/X3jWTbczUMNJdsG5AqAurI0zqJIni/SPJZI8hsXykmKBpQAYRGZT7XBsTdUf4x3YcwPkyrGla2Tt5Z62w==",
             "dev": true,
             "requires": {
-                "@babel/cli": "7.16.0",
-                "@babel/core": "7.16.0",
-                "@babel/eslint-parser": "7.16.3",
-                "@babel/plugin-proposal-class-properties": "7.16.0",
-                "@babel/preset-env": "7.16.4",
-                "@babel/preset-react": "7.16.7",
-                "@babel/register": "^7.16.0",
-                "@babel/runtime-corejs3": "7.16.8",
-                "@exabyte-io/esse.js": "2023.11.22-1",
-                "@types/chai": "^4.3.5",
-                "@types/crypto-js": "^4.1.1",
-                "@types/js-yaml": "^4.0.5",
-                "@types/json-schema": "^7.0.12",
-                "@types/mocha": "^10.0.1",
-                "@types/node": "^20.4.2",
-                "@types/react-jsonschema-form": "^1.7.8",
-                "@types/underscore": "^1.11.6",
-                "ajv": "4.1.7",
                 "crypto-js": "^4.1.1",
                 "js-yaml": "^4.1.0",
                 "json-schema": "^0.4.0",
-                "json-schema-deref-sync": "0.14.0",
-                "json-schema-merge-allof": "^0.8.1",
-                "json-schema-to-typescript": "^13.0.2",
-                "lodash": "^4.17.21",
+                "lodash": "^4.17.*",
                 "mathjs": "^3.9.0",
                 "mixwith": "^0.1.1",
                 "nunjucks": "^3.2.4",
@@ -1384,28 +1667,12 @@
                 "uuid": "8.3.2"
             },
             "dependencies": {
-                "ajv": {
-                    "version": "4.1.7",
-                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.1.7.tgz",
-                    "integrity": "sha512-Hwzb700P98NpTTljTIN3R9vkJMs61zblzMZe7esC78bSEXifltJ6LtXEK+5kp/elG3RFz9xgwk7gVajeI8e3nA==",
-                    "dev": true,
-                    "requires": {
-                        "co": "^4.6.0",
-                        "json-stable-stringify": "^1.0.1"
-                    }
-                },
                 "argparse": {
                     "version": "2.0.1",
                     "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
                     "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
                     "dev": true
                 },
-                "crypto-js": {
-                    "version": "4.2.0",
-                    "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
-                    "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
-                    "dev": true
-                },
                 "js-yaml": {
                     "version": "4.1.0",
                     "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -1416,9 +1683,9 @@
                     }
                 },
                 "semver": {
-                    "version": "7.5.4",
-                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
-                    "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+                    "version": "7.6.0",
+                    "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+                    "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
                     "dev": true,
                     "requires": {
                         "lru-cache": "^6.0.0"
@@ -1432,22 +1699,26 @@
             "integrity": "sha512-BYTDSqvjj6ZiWb8l46T5BKrVfkelct+vK2mh7joHu5UWtJMUzLkb0KQMV1+6SUy4xHFnws33XS7/+JSW1yeZOQ==",
             "dev": true
         },
-        "@exabyte-io/esse.js": {
-            "version": "2023.11.22-1",
-            "resolved": "https://registry.npmjs.org/@exabyte-io/esse.js/-/esse.js-2023.11.22-1.tgz",
-            "integrity": "sha512-G4D9u+srCZWEoG4o9rXDL9VFT6BR6an4m1RwVOE2KkLKIftCyGxCWrlUAfRHh51ZOcP6LMzg1m4MQwwN8J0OBA==",
+        "@exabyte-io/made.js": {
+            "version": "2024.3.21-1",
+            "resolved": "https://registry.npmjs.org/@exabyte-io/made.js/-/made.js-2024.3.21-1.tgz",
+            "integrity": "sha512-r+9m0lMnf2Mpk52rQUL92D7viqhXAuR6ubJTFSRaa7maao8frnpz3HtUhknt8qb2NJNb1wpcohmHtvNH1dpGgQ==",
             "dev": true,
             "requires": {
-                "@babel/cli": "7.16.0",
-                "@babel/core": "7.16.0",
-                "@babel/eslint-parser": "7.16.3",
-                "@babel/preset-env": "7.16.4",
-                "@babel/register": "7.16.0",
-                "ajv": "^4.1.7",
-                "file": "^0.2.2",
-                "js-yaml": "^4.1.0",
-                "json-schema-deref-sync": "0.14.0",
-                "lodash": "4.17.21"
+                "@babel/core": "^7.16.0",
+                "@exabyte-io/periodic-table.js": "2022.5.28-0",
+                "@types/chai": "^4.3.5",
+                "@types/mocha": "^10.0.1",
+                "@types/node": "^20.4.2",
+                "@types/underscore": "^1.11.6",
+                "@types/underscore.string": "^0.0.40",
+                "array-almost-equal": "^1.0.0",
+                "crypto-js": "^3.1.9-1",
+                "lodash": "^4.17.*",
+                "mathjs": "^3.9.0",
+                "typescript": "^4.5.5",
+                "underscore": "^1.8.3",
+                "underscore.string": "^3.3.4"
             },
             "dependencies": {
                 "@babel/register": {
@@ -1463,89 +1734,10 @@
                         "source-map-support": "^0.5.16"
                     }
                 },
-                "ajv": {
-                    "version": "4.11.8",
-                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
-                    "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==",
-                    "dev": true,
-                    "requires": {
-                        "co": "^4.6.0",
-                        "json-stable-stringify": "^1.0.1"
-                    }
-                },
-                "argparse": {
-                    "version": "2.0.1",
-                    "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
-                    "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
-                    "dev": true
-                },
-                "js-yaml": {
-                    "version": "4.1.0",
-                    "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
-                    "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
-                    "dev": true,
-                    "requires": {
-                        "argparse": "^2.0.1"
-                    }
-                }
-            }
-        },
-        "@exabyte-io/made.js": {
-            "version": "2022.6.15-0",
-            "resolved": "https://registry.npmjs.org/@exabyte-io/made.js/-/made.js-2022.6.15-0.tgz",
-            "integrity": "sha512-pAaexkSt2K0s/U8KKwlE11q++AMgeRqlLUaBehEUc7lCZ96tbmmqUEqM5o3O/BDVUO6vXbbgW52NupEo9txy1g==",
-            "dev": true,
-            "requires": {
-                "@babel/cli": "^7.16.0",
-                "@babel/core": "^7.16.0",
-                "@babel/eslint-parser": "^7.16.3",
-                "@babel/plugin-proposal-class-properties": "^7.16.0",
-                "@babel/preset-env": "^7.16.4",
-                "@babel/register": "^7.16.0",
-                "@exabyte-io/code.js": "2022.6.15-1",
-                "@exabyte-io/periodic-table.js": "2022.5.5-2",
-                "array-almost-equal": "^1.0.0",
-                "crypto-js": "^3.1.9-1",
-                "lodash": "^4.17.4",
-                "mathjs": "^3.9.0",
-                "mixwith": "^0.1.1",
-                "underscore": "^1.8.3",
-                "underscore.string": "^3.3.4"
-            },
-            "dependencies": {
-                "@exabyte-io/code.js": {
-                    "version": "2022.6.15-1",
-                    "resolved": "https://registry.npmjs.org/@exabyte-io/code.js/-/code.js-2022.6.15-1.tgz",
-                    "integrity": "sha512-Meugu4ogq+UOCvkjfpB5l3FyXKPI4AgFkuw1VUFGXaYsJ8KeYVOLFVkNQXlHNBS7KwlJftAMHBHPZyNAMMBc7g==",
-                    "dev": true,
-                    "requires": {
-                        "@babel/cli": "7.16.0",
-                        "@babel/core": "7.16.0",
-                        "@babel/eslint-parser": "7.16.3",
-                        "@babel/plugin-proposal-class-properties": "7.16.0",
-                        "@babel/preset-env": "7.16.4",
-                        "@babel/preset-react": "7.16.7",
-                        "@babel/register": "^7.16.0",
-                        "@babel/runtime-corejs3": "7.16.8",
-                        "crypto-js": "^4.1.1",
-                        "lodash": "^4.17.21",
-                        "mathjs": "^3.9.0",
-                        "mixwith": "^0.1.1",
-                        "underscore": "^1.13.3"
-                    },
-                    "dependencies": {
-                        "crypto-js": {
-                            "version": "4.1.1",
-                            "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
-                            "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==",
-                            "dev": true
-                        }
-                    }
-                },
                 "@exabyte-io/periodic-table.js": {
-                    "version": "2022.5.5-2",
-                    "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.5-2.tgz",
-                    "integrity": "sha512-LhM3TygrhP1qAJHlfjDcpLHS1jFxapLIquB5a1BlgRgn7ew9V8Dvfde2NNT3gQoBL16TmXk4OiwX0ApbEGDnEA==",
+                    "version": "2022.5.28-0",
+                    "resolved": "https://registry.npmjs.org/@exabyte-io/periodic-table.js/-/periodic-table.js-2022.5.28-0.tgz",
+                    "integrity": "sha512-BA+u07dkt4e8yqcBHTv5szXXeMyNFcW0G2Ki3Vbugv6ku6dfl4+Sji8cs5PUr+hkYptc7rTg5r89lfr6Vt+oJw==",
                     "dev": true,
                     "requires": {
                         "@babel/cli": "7.16.0",
@@ -1557,19 +1749,6 @@
                         "underscore": "1.8.3"
                     },
                     "dependencies": {
-                        "@babel/register": {
-                            "version": "7.16.0",
-                            "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.16.0.tgz",
-                            "integrity": "sha512-lzl4yfs0zVXnooeLE0AAfYaT7F3SPA8yB2Bj4W1BiZwLbMS3MZH35ZvCWSRHvneUugwuM+Wsnrj7h0F7UmU3NQ==",
-                            "dev": true,
-                            "requires": {
-                                "clone-deep": "^4.0.1",
-                                "find-cache-dir": "^2.0.0",
-                                "make-dir": "^2.1.0",
-                                "pirates": "^4.0.0",
-                                "source-map-support": "^0.5.16"
-                            }
-                        },
                         "underscore": {
                             "version": "1.8.3",
                             "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz",
@@ -1577,6 +1756,12 @@
                             "dev": true
                         }
                     }
+                },
+                "crypto-js": {
+                    "version": "3.3.0",
+                    "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
+                    "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==",
+                    "dev": true
                 }
             }
         },
@@ -1737,6 +1922,77 @@
             "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==",
             "dev": true
         },
+        "@mat3ra/esse": {
+            "version": "2024.3.20-0",
+            "resolved": "https://registry.npmjs.org/@mat3ra/esse/-/esse-2024.3.20-0.tgz",
+            "integrity": "sha512-X+VXCpv8yCSUhYulfvxjWk675usIsVbmiX0tsCpTGxFugKr9PdGRr3Jw+riYy4u5AniVenFR8TVognGn9zIvww==",
+            "dev": true,
+            "requires": {
+                "@babel/cli": "7.16.0",
+                "@babel/core": "7.16.0",
+                "@babel/eslint-parser": "7.16.3",
+                "@babel/plugin-proposal-class-properties": "7.16.0",
+                "@babel/preset-env": "7.16.4",
+                "@babel/preset-react": "7.16.7",
+                "@babel/preset-typescript": "^7.22.5",
+                "@babel/register": "^7.16.0",
+                "@babel/runtime-corejs3": "7.16.8",
+                "@tsconfig/node14": "^14.1.0",
+                "@tsconfig/node20": "^20.1.2",
+                "@types/chai": "^4.3.11",
+                "@types/js-yaml": "^4.0.9",
+                "@types/json-schema-merge-allof": "^0.6.5",
+                "@types/mocha": "^10.0.6",
+                "ajv": "^8.12.0",
+                "js-yaml": "^4.1.0",
+                "json-schema": "^0.4.0",
+                "json-schema-deref-sync": "0.14.0",
+                "json-schema-merge-allof": "^0.8.1",
+                "json-schema-to-typescript": "^13.1.2",
+                "lodash": "4.17.21"
+            },
+            "dependencies": {
+                "@tsconfig/node14": {
+                    "version": "14.1.0",
+                    "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-14.1.0.tgz",
+                    "integrity": "sha512-VmsCG04YR58ciHBeJKBDNMWWfYbyP8FekWVuTlpstaUPlat1D0x/tXzkWP7yCMU0eSz9V4OZU0LBWTFJ3xZf6w==",
+                    "dev": true
+                },
+                "ajv": {
+                    "version": "8.12.0",
+                    "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+                    "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+                    "dev": true,
+                    "requires": {
+                        "fast-deep-equal": "^3.1.1",
+                        "json-schema-traverse": "^1.0.0",
+                        "require-from-string": "^2.0.2",
+                        "uri-js": "^4.2.2"
+                    }
+                },
+                "argparse": {
+                    "version": "2.0.1",
+                    "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+                    "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+                    "dev": true
+                },
+                "js-yaml": {
+                    "version": "4.1.0",
+                    "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+                    "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+                    "dev": true,
+                    "requires": {
+                        "argparse": "^2.0.1"
+                    }
+                },
+                "json-schema-traverse": {
+                    "version": "1.0.0",
+                    "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+                    "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+                    "dev": true
+                }
+            }
+        },
         "@nicolo-ribaudo/chokidar-2": {
             "version": "2.1.8-no-fsevents.3",
             "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
@@ -1767,16 +2023,16 @@
             "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==",
             "dev": true
         },
-        "@types/chai": {
-            "version": "4.3.11",
-            "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz",
-            "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==",
+        "@tsconfig/node20": {
+            "version": "20.1.2",
+            "resolved": "https://registry.npmjs.org/@tsconfig/node20/-/node20-20.1.2.tgz",
+            "integrity": "sha512-madaWq2k+LYMEhmcp0fs+OGaLFk0OenpHa4gmI4VEmCKX4PJntQ6fnnGADVFrVkBj0wIdAlQnK/MrlYTHsa1gQ==",
             "dev": true
         },
-        "@types/crypto-js": {
-            "version": "4.2.1",
-            "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.1.tgz",
-            "integrity": "sha512-FSPGd9+OcSok3RsM0UZ/9fcvMOXJ1ENE/ZbLfOPlBWj7BgXtEAM8VYfTtT760GiLbQIMoVozwVuisjvsVwqYWw==",
+        "@types/chai": {
+            "version": "4.3.12",
+            "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.12.tgz",
+            "integrity": "sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==",
             "dev": true
         },
         "@types/glob": {
@@ -1801,6 +2057,15 @@
             "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
             "dev": true
         },
+        "@types/json-schema-merge-allof": {
+            "version": "0.6.5",
+            "resolved": "https://registry.npmjs.org/@types/json-schema-merge-allof/-/json-schema-merge-allof-0.6.5.tgz",
+            "integrity": "sha512-5mS11ZUTyFNUVEMpK3uKoPb6BWL/nLgW/ln2VOiI8OOxKEYC4Gl9O3WjS5P49yqVTfkcbCAPKw3T1O4erUah5g==",
+            "dev": true,
+            "requires": {
+                "@types/json-schema": "*"
+            }
+        },
         "@types/json5": {
             "version": "0.0.29",
             "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -1808,9 +2073,9 @@
             "dev": true
         },
         "@types/lodash": {
-            "version": "4.14.202",
-            "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
-            "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
+            "version": "4.17.0",
+            "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz",
+            "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==",
             "dev": true
         },
         "@types/minimatch": {
@@ -1826,9 +2091,9 @@
             "dev": true
         },
         "@types/node": {
-            "version": "20.9.4",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz",
-            "integrity": "sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA==",
+            "version": "20.11.26",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.26.tgz",
+            "integrity": "sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==",
             "dev": true,
             "requires": {
                 "undici-types": "~5.26.4"
@@ -1840,45 +2105,21 @@
             "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==",
             "dev": true
         },
-        "@types/prop-types": {
-            "version": "15.7.11",
-            "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
-            "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
-            "dev": true
-        },
-        "@types/react": {
-            "version": "18.2.38",
-            "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.38.tgz",
-            "integrity": "sha512-cBBXHzuPtQK6wNthuVMV6IjHAFkdl/FOPFIlkd81/Cd1+IqkHu/A+w4g43kaQQoYHik/ruaQBDL72HyCy1vuMw==",
-            "dev": true,
-            "requires": {
-                "@types/prop-types": "*",
-                "@types/scheduler": "*",
-                "csstype": "^3.0.2"
-            }
-        },
-        "@types/react-jsonschema-form": {
-            "version": "1.7.12",
-            "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.7.12.tgz",
-            "integrity": "sha512-AueIjMySdH2uI92bBJYVJ/n6Wmrtai+7/ce6Fn4ThrJz5XGG7Jc1c0agktPCYfoiBunEw2hV8oIZdIke3LJIRQ==",
-            "dev": true,
-            "requires": {
-                "@types/json-schema": "*",
-                "@types/react": "*"
-            }
-        },
-        "@types/scheduler": {
-            "version": "0.16.8",
-            "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
-            "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
-            "dev": true
-        },
         "@types/underscore": {
             "version": "1.11.15",
             "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.15.tgz",
             "integrity": "sha512-HP38xE+GuWGlbSRq9WrZkousaQ7dragtZCruBVMi0oX1migFZavZ3OROKHSkNp/9ouq82zrWtZpg18jFnVN96g==",
             "dev": true
         },
+        "@types/underscore.string": {
+            "version": "0.0.40",
+            "resolved": "https://registry.npmjs.org/@types/underscore.string/-/underscore.string-0.0.40.tgz",
+            "integrity": "sha512-6J3Wp6PnuXhSxVSVaSoh9SKiormScoa2pPLKpZk5QsjKD3RKQZQj/mwBVfULd2MUl5gM/UlLSvr+cynd/7VWQA==",
+            "dev": true,
+            "requires": {
+                "@types/underscore": "*"
+            }
+        },
         "@ungap/promise-all-settled": {
             "version": "1.1.2",
             "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
@@ -1904,9 +2145,9 @@
             "dev": true
         },
         "acorn-walk": {
-            "version": "8.3.0",
-            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
-            "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
+            "version": "8.3.2",
+            "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
+            "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
             "dev": true
         },
         "aggregate-error": {
@@ -2347,13 +2588,13 @@
             "dev": true
         },
         "cli-color": {
-            "version": "2.0.3",
-            "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.3.tgz",
-            "integrity": "sha512-OkoZnxyC4ERN3zLzZaY9Emb7f/MhBOIpePv0Ycok0fJYT+Ouo00UBEIwsVsr0yoow++n5YWlSUgST9GKhNHiRQ==",
+            "version": "2.0.4",
+            "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz",
+            "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==",
             "dev": true,
             "requires": {
                 "d": "^1.0.1",
-                "es5-ext": "^0.10.61",
+                "es5-ext": "^0.10.64",
                 "es6-iterator": "^2.0.3",
                 "memoizee": "^0.4.15",
                 "timers-ext": "^0.1.7"
@@ -2461,12 +2702,6 @@
                 "shallow-clone": "^3.0.0"
             }
         },
-        "co": {
-            "version": "4.6.0",
-            "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
-            "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
-            "dev": true
-        },
         "color-convert": {
             "version": "1.9.3",
             "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -2601,25 +2836,19 @@
             "dev": true
         },
         "crypto-js": {
-            "version": "3.3.0",
-            "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz",
-            "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==",
-            "dev": true
-        },
-        "csstype": {
-            "version": "3.1.2",
-            "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
-            "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+            "version": "4.2.0",
+            "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+            "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==",
             "dev": true
         },
         "d": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
-            "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+            "version": "1.0.2",
+            "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+            "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
             "dev": true,
             "requires": {
-                "es5-ext": "^0.10.50",
-                "type": "^1.0.1"
+                "es5-ext": "^0.10.64",
+                "type": "^2.7.2"
             }
         },
         "dag-map": {
@@ -2686,37 +2915,6 @@
                 }
             }
         },
-        "define-data-property": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
-            "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
-            "dev": true,
-            "requires": {
-                "get-intrinsic": "^1.2.1",
-                "gopd": "^1.0.1",
-                "has-property-descriptors": "^1.0.0"
-            },
-            "dependencies": {
-                "function-bind": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-                    "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-                    "dev": true
-                },
-                "get-intrinsic": {
-                    "version": "1.2.2",
-                    "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
-                    "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
-                    "dev": true,
-                    "requires": {
-                        "function-bind": "^1.1.2",
-                        "has-proto": "^1.0.1",
-                        "has-symbols": "^1.0.3",
-                        "hasown": "^2.0.0"
-                    }
-                }
-            }
-        },
         "define-properties": {
             "version": "1.1.4",
             "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
@@ -2819,13 +3017,14 @@
             }
         },
         "es5-ext": {
-            "version": "0.10.62",
-            "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
-            "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+            "version": "0.10.64",
+            "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+            "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
             "dev": true,
             "requires": {
                 "es6-iterator": "^2.0.3",
                 "es6-symbol": "^3.1.3",
+                "esniff": "^2.0.1",
                 "next-tick": "^1.1.0"
             }
         },
@@ -2847,13 +3046,13 @@
             }
         },
         "es6-symbol": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
-            "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+            "version": "3.1.4",
+            "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+            "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
             "dev": true,
             "requires": {
-                "d": "^1.0.1",
-                "ext": "^1.1.2"
+                "d": "^1.0.2",
+                "ext": "^1.7.0"
             }
         },
         "es6-weak-map": {
@@ -3349,6 +3548,18 @@
             "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
             "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
         },
+        "esniff": {
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+            "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+            "dev": true,
+            "requires": {
+                "d": "^1.0.1",
+                "es5-ext": "^0.10.62",
+                "event-emitter": "^0.3.5",
+                "type": "^2.7.2"
+            }
+        },
         "espree": {
             "version": "7.3.1",
             "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
@@ -3450,14 +3661,6 @@
             "dev": true,
             "requires": {
                 "type": "^2.7.2"
-            },
-            "dependencies": {
-                "type": {
-                    "version": "2.7.2",
-                    "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
-                    "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
-                    "dev": true
-                }
             }
         },
         "fast-deep-equal": {
@@ -3484,12 +3687,6 @@
             "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
             "dev": true
         },
-        "file": {
-            "version": "0.2.2",
-            "resolved": "https://registry.npmjs.org/file/-/file-0.2.2.tgz",
-            "integrity": "sha512-gwabMtChzdnpDJdPEpz8Vr/PX0pU85KailuPV71Zw/un5yJVKvzukhB3qf6O3lnTwIe5CxlMYLh3jOK3w5xrLA==",
-            "dev": true
-        },
         "file-entry-cache": {
             "version": "6.0.1",
             "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
@@ -3704,35 +3901,6 @@
             "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
             "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
         },
-        "gopd": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
-            "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
-            "dev": true,
-            "requires": {
-                "get-intrinsic": "^1.1.3"
-            },
-            "dependencies": {
-                "function-bind": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-                    "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-                    "dev": true
-                },
-                "get-intrinsic": {
-                    "version": "1.2.2",
-                    "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
-                    "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
-                    "dev": true,
-                    "requires": {
-                        "function-bind": "^1.1.2",
-                        "has-proto": "^1.0.1",
-                        "has-symbols": "^1.0.3",
-                        "hasown": "^2.0.0"
-                    }
-                }
-            }
-        },
         "graceful-fs": {
             "version": "4.2.10",
             "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
@@ -3772,12 +3940,6 @@
                 "get-intrinsic": "^1.1.1"
             }
         },
-        "has-proto": {
-            "version": "1.0.1",
-            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
-            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
-            "dev": true
-        },
         "has-symbols": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
@@ -3810,23 +3972,6 @@
                 }
             }
         },
-        "hasown": {
-            "version": "2.0.0",
-            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
-            "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
-            "dev": true,
-            "requires": {
-                "function-bind": "^1.1.2"
-            },
-            "dependencies": {
-                "function-bind": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-                    "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-                    "dev": true
-                }
-            }
-        },
         "he": {
             "version": "1.2.0",
             "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
@@ -4124,12 +4269,6 @@
             "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
             "dev": true
         },
-        "isarray": {
-            "version": "2.0.5",
-            "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
-            "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
-            "dev": true
-        },
         "isexe": {
             "version": "2.0.0",
             "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -4348,9 +4487,9 @@
             }
         },
         "json-schema-to-typescript": {
-            "version": "13.1.1",
-            "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.1.tgz",
-            "integrity": "sha512-F3CYhtA7F3yPbb8vF7sFchk/2dnr1/yTKf8RcvoNpjnh67ZS/ZMH1ElLt5KHAtf2/bymiejLQQszszPWEeTdSw==",
+            "version": "13.1.2",
+            "resolved": "https://registry.npmjs.org/json-schema-to-typescript/-/json-schema-to-typescript-13.1.2.tgz",
+            "integrity": "sha512-17G+mjx4nunvOpkPvcz7fdwUwYCEwyH8vR3Ym3rFiQ8uzAL3go+c1306Kk7iGRk8HuXBXqy+JJJmpYl0cvOllw==",
             "dev": true,
             "requires": {
                 "@bcherny/json-schema-ref-parser": "10.0.5-fork",
@@ -4375,49 +4514,6 @@
             "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
             "dev": true
         },
-        "json-stable-stringify": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.0.tgz",
-            "integrity": "sha512-zfA+5SuwYN2VWqN1/5HZaDzQKLJHaBVMZIIM+wuYjdptkaQsqzDdqjqf+lZZJUuJq1aanHiY8LhH8LmH+qBYJA==",
-            "dev": true,
-            "requires": {
-                "call-bind": "^1.0.5",
-                "isarray": "^2.0.5",
-                "jsonify": "^0.0.1",
-                "object-keys": "^1.1.1"
-            },
-            "dependencies": {
-                "call-bind": {
-                    "version": "1.0.5",
-                    "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
-                    "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
-                    "dev": true,
-                    "requires": {
-                        "function-bind": "^1.1.2",
-                        "get-intrinsic": "^1.2.1",
-                        "set-function-length": "^1.1.1"
-                    }
-                },
-                "function-bind": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-                    "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-                    "dev": true
-                },
-                "get-intrinsic": {
-                    "version": "1.2.2",
-                    "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
-                    "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
-                    "dev": true,
-                    "requires": {
-                        "function-bind": "^1.1.2",
-                        "has-proto": "^1.0.1",
-                        "has-symbols": "^1.0.3",
-                        "hasown": "^2.0.0"
-                    }
-                }
-            }
-        },
         "json-stable-stringify-without-jsonify": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
@@ -4429,12 +4525,6 @@
             "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
             "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
         },
-        "jsonify": {
-            "version": "0.0.1",
-            "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz",
-            "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==",
-            "dev": true
-        },
         "jsx-ast-utils": {
             "version": "3.3.2",
             "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz",
@@ -5863,38 +5953,6 @@
             "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
             "dev": true
         },
-        "set-function-length": {
-            "version": "1.1.1",
-            "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
-            "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
-            "dev": true,
-            "requires": {
-                "define-data-property": "^1.1.1",
-                "get-intrinsic": "^1.2.1",
-                "gopd": "^1.0.1",
-                "has-property-descriptors": "^1.0.0"
-            },
-            "dependencies": {
-                "function-bind": {
-                    "version": "1.1.2",
-                    "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
-                    "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
-                    "dev": true
-                },
-                "get-intrinsic": {
-                    "version": "1.2.2",
-                    "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
-                    "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
-                    "dev": true,
-                    "requires": {
-                        "function-bind": "^1.1.2",
-                        "has-proto": "^1.0.1",
-                        "has-symbols": "^1.0.3",
-                        "hasown": "^2.0.0"
-                    }
-                }
-            }
-        },
         "shallow-clone": {
             "version": "3.0.1",
             "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
@@ -6281,15 +6339,15 @@
             }
         },
         "traverse": {
-            "version": "0.6.7",
-            "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz",
-            "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==",
+            "version": "0.6.8",
+            "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz",
+            "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==",
             "dev": true
         },
         "ts-node": {
-            "version": "10.9.1",
-            "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
-            "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
+            "version": "10.9.2",
+            "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
+            "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
             "dev": true,
             "requires": {
                 "@cspotcode/source-map-support": "^0.8.0",
@@ -6308,9 +6366,9 @@
             },
             "dependencies": {
                 "acorn": {
-                    "version": "8.11.2",
-                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
-                    "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
+                    "version": "8.11.3",
+                    "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
+                    "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
                     "dev": true
                 },
                 "diff": {
@@ -6351,9 +6409,9 @@
             "dev": true
         },
         "type": {
-            "version": "1.2.0",
-            "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
-            "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
+            "version": "2.7.2",
+            "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
+            "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
             "dev": true
         },
         "type-check": {
diff --git a/package.json b/package.json
index 8f2ba3d..2a6ef7b 100644
--- a/package.json
+++ b/package.json
@@ -44,10 +44,11 @@
         "underscore.string": "^3.3.4"
     },
     "devDependencies": {
-        "@exabyte-io/code.js": "2023.11.22-0",
+        "@exabyte-io/code.js": "2024.2.29-0",
         "@exabyte-io/eslint-config": "^2022.11.17-0",
-        "@exabyte-io/made.js": "2022.6.15-0",
-        "@exabyte-io/application-flavors.js": "2024.2.27-1",
+        "@exabyte-io/made.js": "2024.3.21-1",
+        "@exabyte-io/application-flavors.js": "2024.3.21-0",
+        "@mat3ra/esse": "2024.3.20-0",
         "chai": "^4.3.4",
         "eslint": "7.32.0",
         "eslint-config-airbnb": "19.0.2",
diff --git a/src/context/providers/espresso/providers.js b/src/context/providers/espresso/providers.js
index d7a2cb6..3db5773 100644
--- a/src/context/providers/espresso/providers.js
+++ b/src/context/providers/espresso/providers.js
@@ -29,6 +29,11 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
         return material.Basis.uniqueElements;
     }
 
+    static uniqueElementsWithLabels(material) {
+        // return unique items
+        return [...new Set(material.Basis.elementsWithLabelsArray)];
+    }
+
     /** Returns the input text block for atomic positions WITH constraints.
      */
     static atomicPositionsWithConstraints(material) {
@@ -50,6 +55,10 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
         return material.Basis.uniqueElements.length;
     }
 
+    static NTYP_WITH_LABELS(material) {
+        return this.uniqueElementsWithLabels(material).length;
+    }
+
     buildQEPWXContext(material) {
         const IBRAV = 0; // use CELL_PARAMETERS to define Bravais lattice
 
@@ -57,8 +66,10 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
             IBRAV,
             RESTART_MODE: this.RESTART_MODE,
             ATOMIC_SPECIES: this.ATOMIC_SPECIES(material),
+            ATOMIC_SPECIES_WITH_LABELS: this.ATOMIC_SPECIES_WITH_LABELS(material),
             NAT: QEPWXContextProvider.NAT(material),
             NTYP: QEPWXContextProvider.NTYP(material),
+            NTYP_WITH_LABELS: QEPWXContextProvider.NTYP_WITH_LABELS(material),
             ATOMIC_POSITIONS: QEPWXContextProvider.atomicPositionsWithConstraints(material),
             ATOMIC_POSITIONS_WITHOUT_CONSTRAINTS: QEPWXContextProvider.atomicPositions(material),
             CELL_PARAMETERS: QEPWXContextProvider.CELL_PARAMETERS(material),
@@ -110,6 +121,21 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
             .join("\n");
     }
 
+    ATOMIC_SPECIES_WITH_LABELS(material) {
+        return QEPWXContextProvider.uniqueElementsWithLabels(material)
+            .map((symbol) => {
+                const symbolWithoutLabel = symbol.replace(/\d$/, "");
+                const label = symbol.match(/\d$/g) ? symbol.match(/\d$/g)[0] : "";
+                const pseudo = this.getPseudoBySymbol(symbolWithoutLabel);
+                return QEPWXContextProvider.elementAndPseudoToAtomicSpecieWithLabels(
+                    symbolWithoutLabel,
+                    pseudo,
+                    label,
+                );
+            })
+            .join("\n");
+    }
+
     static CELL_PARAMETERS(material) {
         return material.Lattice.vectorArrays
             .map((x) => {
@@ -125,7 +151,13 @@ export class QEPWXContextProvider extends mix(ExecutableContextProvider).with(
     static symbolToAtomicSpecie(symbol, pseudo) {
         const el = PERIODIC_TABLE[symbol];
         const filename = pseudo?.filename || path.basename(pseudo?.path || "");
-        return el ? s.sprintf("%s %f %s", symbol, el.atomic_mass, filename) : undefined;
+        return s.sprintf("%s %f %s", symbol, el.atomic_mass, filename) || "";
+    }
+
+    static elementAndPseudoToAtomicSpecieWithLabels(symbol, pseudo, label = "") {
+        const el = PERIODIC_TABLE[symbol];
+        const filename = pseudo?.filename || path.basename(pseudo?.path || "");
+        return s.sprintf("%s%s %f %s", symbol, label, el.atomic_mass, filename) || "";
     }
 }
 
